package com.br.command.impl;

import java.util.List;

import org.apache.log4j.Logger;
import org.json.JSONObject;

import com.br.command.BaseCommand;
import com.br.entities.Player;
import com.br.socket.ConnectionWS;
import com.br.socket.GameSocket;
import com.br.utils.BufferUtils;
import com.br.utils.TiposMensagensEnviar;

public class Login implements BaseCommand{
	
	private Logger logger = Logger.getLogger(this.getClass());

	public void process(ConnectionWS me, JSONObject json) {
		
		try{
			//cria um jogador random
			Player player = new Player();
			player.setTileX(2);
			player.setTileY(9);
			player.setUsername("Jogador " + System.currentTimeMillis());
			player.setSprite("chara1.gif");
			
			//verificar e desconectar outro player caso esteja na conta
			List<ConnectionWS> connections = GameSocket.getConnections();
			synchronized (connections) {
				for (int i = 0; i < connections.size(); i++) {
					try {
						ConnectionWS con = connections.get(i);
						
						if(con.getPlayer()!=null && con.getPlayer().getUsername().equals(player.getUsername())){
							logger.debug("Desconectando outro player da minha conta...");
							connections.remove(i);
							//notifica os outros player para removelo da tela
							GameSocket.broadcast(BufferUtils.desconectarOtherPlayer(player.getUsername()).toString(), me);
						}
					
					} catch (Exception e) {
						logger.error("Erro em verificar e desconectar",e);
					}
					
				}
			}
			
			//armazena a instancia na conexao
			me.setPlayer(player);
			
			//cria o buffer do player
			JSONObject playerJson = BufferUtils.montarPlayer(TiposMensagensEnviar.CONNECTED, player);
			
			//envia buffer para o jogador montar na tela
			me.sendMessage(playerJson.toString());
			
			//notifica todos que eu entrei no jogo
			playerJson.put("tipo", TiposMensagensEnviar.OTHER_PLAYER_ON_SCREEN);
			GameSocket.broadcast( playerJson.toString(), me);
			
			//pega todos os players e colocam na minha tela
			new BuscarPlayersTela().process(me, playerJson);
			
		}catch(Exception e){
			logger.error("Erro processando Login...", e);
		}
		
	}

	
	
}
